package view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import java.io.*;

import javax.swing.WindowConstants;

import controller.ControladorVistas;

/**
 * This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
 * Builder, which is free for non-commercial use. If Jigloo is being used
 * commercially (ie, by a corporation, company or business for any purpose
 * whatever) then you should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details. Use of Jigloo implies
 * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
 * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
 * ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
public class CargaArchivo extends javax.swing.JFrame {

	private static final long serialVersionUID = 1L;

	{
		// Set Look & Feel
		try {
			// javax.swing.UIManager.setLookAndFeel("com.jgoodies.looks.plastic.PlasticXPLookAndFeel");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private JScrollPane jScrollPane1;
	private JTextArea jTextArea1;
	private JLabel jLabel1;
	private JButton jButtonBuscar;
	private ControladorVistas cont;
	private JButton jButtonCancelar;
	private JFileChooser selectorArchivo;
	private JButton jButtonCarga;
	private String tipo;
	private File archivo;

	public CargaArchivo(String tipo) {
		this.tipo = tipo;
		initGUI();
	}

	private void initGUI() {
		setTitle("Carga de Archivo  " + tipo);
		setVisible(true);
		try {
			setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				jButtonCancelar = new JButton();
				getContentPane().add(jButtonCancelar);
				jButtonCancelar.setText("Cancelar");
				jButtonCancelar.setBounds(93, 449, 155, 28);
				jButtonCancelar.setBackground(new java.awt.Color(255,74,79));
				jButtonCancelar.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {

						cont.salirVCarga(tipo);
					}
				});
			}
			{
				jButtonCarga = new JButton();
				getContentPane().add(jButtonCarga);
				jButtonCarga.setText("Confirmar Carga");
				jButtonCarga.setBounds(284, 449, 199, 28);
				jButtonCarga.setEnabled(false);
				jButtonCarga.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {

						try {
							cont.procesarCarga(jTextArea1.getText()); //
						} catch (Exception e) {
							//mostrarMensajeError();
							e.printStackTrace();
						}
						jButtonCarga.setEnabled(false);

					}
				});
			}
			{
				jButtonBuscar = new JButton();
				getContentPane().add(jButtonBuscar);
				getContentPane().add(getJLabel1());
				getContentPane().add(getJScrollPane1());
				jButtonBuscar.setText("Buscar Archivo...");
				jButtonBuscar.setBounds(378, 11, 149, 32);
				jButtonBuscar.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {

						selectorArchivo = new JFileChooser();
						getContentPane().add(selectorArchivo);
						selectorArchivo.setBounds(46, 84, 404, 305);
						selectorArchivo
								.setFileSelectionMode(JFileChooser.FILES_ONLY);
						cont.procesarBuscarArchivo();
						selectorArchivo.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {

							}
						});
					}
				});
			}
			pack();
			setLocation(100, 100);
			getContentPane().setBackground(new java.awt.Color(64,128,128));
			this.setSize(571, 531);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void setControlador(ControladorVistas c) {
		this.cont = c;
	}

	public void cerrar() {
		dispose();
	}

	public boolean validarNombre(String nombre) { // valida que el archivo sea
													// .xml

		int cant = nombre.length();
		String ext = "";

		for (int i = cant - 1; i > (cant - 4); i--) {
			ext += nombre.charAt(i);

		}
		if (ext.equalsIgnoreCase("lmx"))
			return true;
		else
			return false;
	}

	public void buscarArchivo() { // Busca el archivo con el FileChooser
		jButtonBuscar.setEnabled(false);

		int resultado = selectorArchivo.showOpenDialog(this);
		if (resultado == JFileChooser.CANCEL_OPTION) {
			return;
		}
		this.archivo = selectorArchivo.getSelectedFile();
		String nombre = this.archivo.getName();

		if (!validarNombre(nombre)) {
			JOptionPane.showMessageDialog(null, "No es un archivo.xml !",
					"ERROR", JOptionPane.ERROR_MESSAGE);
			jButtonBuscar.setEnabled(true);
			return;
		}
		try {
			mostrarDatos();
			jButtonCarga.setEnabled(true);

		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "Error al abrir al Archivo",
					"ERROR", JOptionPane.ERROR_MESSAGE);
			jButtonBuscar.setEnabled(true);
			return;
		}
	}

	private void mostrarDatos() throws FileNotFoundException { // Lee el texto
																// del archivo y
																// lo muestra en
																// el jTextArea
		BufferedReader entrada = new BufferedReader(new FileReader(archivo));
		StringBuffer bufer = new StringBuffer();
		String texto;

		try {
			while ((texto = entrada.readLine()) != null)
				bufer.append(texto + "\n");

			jTextArea1.append(bufer.toString());
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public String getPathArchivo() {
		String path = this.archivo.getPath();
		return path;
	}

	public void mostrarMensajeOK() {

		JOptionPane.showMessageDialog(null, "Carga Realizada", " ",
				JOptionPane.PLAIN_MESSAGE);
		cont.salirVCarga(tipo);

	}

	public void mostrarMensajeError() {

		JOptionPane
				.showMessageDialog(
						null,
						"No pudo realizarse la carga, algunos datos no pudieron ser cargados correctamente",
						"ERROR", JOptionPane.ERROR_MESSAGE);
		cont.salirVCarga(tipo);

	}

	private JLabel getJLabel1() {
		if (jLabel1 == null) {
			jLabel1 = new JLabel();
			jLabel1.setText("Vista Previa del Archivo:");
			jLabel1.setBounds(46, 60, 221, 20);
			jLabel1.setBackground(new java.awt.Color(193,253,153));
			jLabel1.setOpaque(true);
		}
		return jLabel1;
	}

	private JScrollPane getJScrollPane1() {
		if (jScrollPane1 == null) {
			jScrollPane1 = new JScrollPane();
			jScrollPane1.setBounds(34, 86, 493, 341);
			getJScrollPane1().getVerticalScrollBar().setAutoscrolls(true);
			getJScrollPane1().getVerticalScrollBar().setAutoscrolls(true);
			jScrollPane1.setViewportView(getJTextArea1());
		}
		return jScrollPane1;

	}

	private JTextArea getJTextArea1() {
		if (jTextArea1 == null) {
			jTextArea1 = new JTextArea();
			jTextArea1.setPreferredSize(new java.awt.Dimension(493, 336));
		}
		return jTextArea1;
	}

}
